package com.newshub.common.fetch;

import lombok.Data;
import lombok.Builder;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 抓取任务执行结果
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class FetchResult {
    
    /**
     * 是否成功
     */
    private boolean success;
    
    /**
     * 新闻数量（总抓取数）
     */
    private int newsCount;
    
    /**
     * 重复的新闻数量（去重后被跳过的数量）
     */
    private int duplicateCount;
    
    /**
     * 总抓取条数（清洗前）
     */
    private int totalFetched;
    
    /**
     * 清洗后条数
     */
    private int cleanedCount;
    
    /**
     * 实际保存条数
     */
    private int savedCount;
    
    /**
     * HTTP响应状态码
     */
    private Integer httpStatusCode;
    
    /**
     * 响应内容大小（字节）
     */
    private Long responseSize;
    
    /**
     * 错误信息
     */
    private String errorMessage;
    
    /**
     * 执行开始时间
     */
    private LocalDateTime startTime;
    
    /**
     * 执行结束时间
     */
    private LocalDateTime endTime;
    
    /**
     * 执行耗时（毫秒）
     */
    private long executionTime;
    
    /**
     * 抓取到的新闻列表（可选，用于调试）
     */
    private List<FetchedNews> fetchedNews;
    
    /**
     * 创建成功结果
     */
    public static FetchResult success(int savedCount, LocalDateTime startTime, LocalDateTime endTime) {
        return FetchResult.builder()
                .success(true)
                .savedCount(savedCount)
                .startTime(startTime)
                .endTime(endTime)
                .executionTime(java.time.Duration.between(startTime, endTime).toMillis())
                .build();
    }
    
    /**
     * 创建失败结果
     */
    public static FetchResult failure(String errorMessage, LocalDateTime startTime, LocalDateTime endTime) {
        return FetchResult.builder()
                .success(false)
                .errorMessage(errorMessage)
                .startTime(startTime)
                .endTime(endTime)
                .executionTime(java.time.Duration.between(startTime, endTime).toMillis())
                .build();
    }
}

